package com.jxdinfo.hussar.cloud.module.example.tjjc.towercrane.service;

import com.jxdinfo.hussar.cloud.module.example.tjjc.towercrane.model.TowerCrane;
import com.jxdinfo.hussar.cloud.module.example.tjjc.towercrane.vo.*;
import com.jxdinfo.hussar.platform.core.base.apiresult.ApiResponse;
import com.jxdinfo.hussar.support.mp.base.service.HussarService;

import java.util.List;
import java.util.Map;

/**
 * 塔机表服务类
 */
public interface TowerCraneService extends HussarService<TowerCrane> {

    /**
     * 查询塔基列表
     * @param towerCraneSearchVO 入参
     * @return 查询结果
     */
    ApiResponse<List<TowerCraneVO>> findByList(TowerCraneSearchVO towerCraneSearchVO);

    /**
     * 分页查询塔机列表
     * @param towerCraneSearchVO 入参
     * @return 查询结果
     */
    ApiResponse<TowerCranePageVO> findByPage(TowerCraneSearchVO towerCraneSearchVO);

    /**
     * 根据设备类型获取塔机监测设备列表
     * @param towerCraneSearchVO 入参
     * @return 查询结果
     */
    ApiResponse<List<DeviceInfoVO>> findDeviceByProductType(TowerCraneSearchVO towerCraneSearchVO);

    /**
     * 新增塔机
     */
    ApiResponse<String> add(TowerCraneVO towerCraneVO);

    /**
     * 根据ID获取塔机
     */
    ApiResponse<TowerCraneVO> findOne(String id);

    /**
     * 修改塔机
     */
    ApiResponse<String> updateTowerCrane(TowerCraneVO towerCraneVO);

    /**
     * 修改通知配置
     */
    ApiResponse<String> updateNotice(TowerCraneVO towerCraneVO);

    /**
     * 根据id删除塔机
     */
    ApiResponse<String> deleteById(TowerCraneVO towerCraneVO);

    /**
     * 获取所有设备的告警情况
     * @param towerCraneSearchVO 入参
     * @return 查询结果
     */
    ApiResponse<Map<String, Integer>> findTowerAlarmCount(TowerCraneSearchVO towerCraneSearchVO);

    /**
     * 获取塔机今日工作情况实时数据
     */
    ApiResponse<TowerTodayRealDataVO> findTowerRealData(String id, String tyProjectCode);

    /**
     * 获取所有塔机信息
     * */
    ApiResponse<List<TowerCraneVO>> findAll();

    /**
     * 获取塔机今日工作情况实时数据
     */
    ApiResponse<AppTowerTodayRealDataVO> findMobileTowerRealData(String towerId, String tyProjectCode);

    /**
     * 根据项目编号和塔机Id获取塔机今日工作情况
     */
    ApiResponse<TowerCraneVO> findTodayWorkSituation(TowerCraneSearchVO towerCraneSearchVO);
}
